perm filename BEAMS.F4[1,MUS] blob
sn#079063 filedate 1973-12-21 generic text, type T, neo UTF8
00010 C***** BEAMS, MARKS, XNOTE ********
00100 SUBROUTINE BEAMS
00200 COMMON/ALF/INP(72),ML/FRMT/F78F(1),FA1(1),FA5(1),IREAD
00400 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
00500 COMMON/SCX/RHY(4),JALPHA(12),JX,U,JZ,IRHY,JD,KA,KB,IZ
00510 1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
00650 1 ,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
00750 1 /STF/RSTFAC(8),RSTJC
00760 DIMENSION R(8,100)
00765 COMMON /XRN/RN(4000)
00770 EQUIVALENCE (R,RN(3001))
00800 DATA BX/25./,BY/.5/
00900
01100 2500 DO 1500 K=1,72
01200 IF(INP(K).NE.'*')GO TO 1500
01300 INP(72)='*'
01400 GO TO 500
01500 1500 CONTINUE
01600 C ABOVE FOR 2ND LINE OF INPUT.
01700 500 REREAD F78F,V
01710 CC IDSK=0
01800 J=0
01810 IF(IREAD.NE.0)J=1
01900 511 J=J+1
02000 N=V(J)
02100 CC IF(N.LT.99.OR.IDSK)GO TO 1511
02200 CC IDSK=-1
02300 CC GO TO 511
02400 C SKIPS LINE #S.
02500 1511 JMP=1
02600 505 L=0
02700 K=0
02800 POS=-10.
02900 IF(MODE.EQ.4)GO TO 5030
03000 C MODE 4 IS FOR ACCENTS ETC.
03050 IF(N.GT.100)GO TO 161
03100 IZ=IZ+1
03110 R(8,IZ)=0
03200 IS=0
03300 503 IF(N.GT.0)GO TO 5031
03400 IS=-1
03410 POS=-1.3
03500 C -1= SLUR INTO 1ST NOTE.
03600 C RA=10
03700 C SETS POS OF LFT SIDE (-10+9, THEN +2)
03800 GO TO 5060
03900 5031 IF(N.LE.80)GO TO 5030
04000 CC POS=0
04100 CC RA=203.
04200 C 203 WILL BECOME 201 AT 61
04300 CC J=J+1
04310 POS=202
04400 GO TO 550
04500 C -1=1ST SLUR FROM NO NOTE; 99= LAST, TO NO NOTE
04600 5030 L=L+1
04700 502 K=K+1
04800 IF(R(1,K).NE.1.)GO TO 502
04900 C IS IT A NOTE?
05000 P=R(2,K)
05100 IF(P.EQ.POS)GO TO 502
05200 C SKIPS DBLSTPS
05300 POS=P
05400 506 IF(L.NE.N)GO TO 5030
05500 CC5060 IF(MODE.EQ.4.OR.JMP.GE.0)J=J+1
05600 5060 IF(MODE.EQ.4)GO TO 30
05700 C NOW SLUR STARTS
05800 IF(JMP)GO TO 504
05900 C JMP=-1 MEANS END NOTE OF GROUP
05910 J=J+1
06000 NN=V(J)
06100 MK=N
06110 N=NN
06155 IF(N)N=-N
06200 M=K
06300 JA=2
06400 JB=4
06500 KN=K
06600 IF(IS)GO TO 550
06700 CC RA=0
06800 RB=0
06900 IF(MODE.EQ.3)GO TO 550
06910 CC KQ=K
07000 A=XNOTE(K)
07050 C XNOTE IS AMOD(R(4,K),100.)
07100 C SAVES LEVEL OF 1ST NOTE.
07200 504 RB=2
07300 B=AMOD(R(6,K),1.0)
07400 IF(B.GE.0.5)RB=4.
07500 IF(B.EQ.0.4)RB=6.
07600 C THESE ARE FOR >(.5) AND ∧(.4) ACCENTS
07700 IF(NN)RB=-RB
07800 C DIP IS SET BY PARAM 7. (STEM DIR. IS AUTOMATIC)
07900 CC RA=1
08000 CC550 R(JA,IZ)=POS+RA
08010 550 R(JA,IZ)=POS
08100 R(JB,IZ)=XNOTE(K)+RB
08200 JA=6
08300 JB=5
08500 C MK=# OF 1ST NOTE, N=END NOTE NOW
08900 JMP=-JMP
09000 IF(JMP.GT.0)GO TO 1503
09100 C GO FIND RT. SIDE OF SLUR
09200 IF(N.LE.MK)N=MK+1
09300 C PICKS UP TYPO ERRORS
09400 JK=0
09500 IF(R(7,K).GE.10)JK=-1
09600 C CHECKS FOR DOT AFTER 1ST NOTE -- FOR TIES.
09700 GO TO 503
09900
10000 1503 R(3,IZ)=STAFF
10100 IF(MODE.EQ.3)GO TO 22
10150 R(8,IZ)=-1
10200 R(1,IZ)=8
10210 IF(IS)R(4,IZ)=R(5,IZ)
10300 NN=-NN
10400 C IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
10500 CC IF(IS.OR.RA.EQ.203)GO TO 61
10550 IF(MK.EQ.IRHY.OR.N.EQ.1)GO TO 61
10600 IF(((XNOTE(K).NE.A.OR.N-MK.GT.1).AND.IS.GE.0.
10626 1 ).OR.IS)GO TO 60
10652 C .N. WAS .KQ. 12/73
10700 CC IF(V(J-1)-1.NE.V(J-2).OR.R(4,K).NE.A)GO TO 60
10800 C JUMP IF NOT ADJACENT NOTE AT SAME PITCH AND NOT 1ST OR LAST.
10810 61 C=9
10820 IF(JK)C=12
10830 IF(R(6,IZ)-R(2,IZ)-C*RSTJC)GO TO 65
10900 IF(IS)A=XNOTE(K)
11000 A=A+.7
11100 IF(NN.GT.0)A=A-1.4
11200 C TO RAISE OR LOWER IT .5
11300 R(4,IZ)=A
11400 R(5,IZ)=A
11500 CC R(2,IZ)=R(2,IZ)+2.3
11600 CC C=2.1
11650 B=-2
11700 CC IF(JK)C=5.1
11750 IF(JK)B=-3
11800 C JK=-1 WHEN NOTE IS DOTTED.
11900 CC C=R(2,IZ)+C*RSTJC
12000 CC R(6,IZ)=R(6,IZ)-2.3
12100 CC A=R(6,IZ)-2.
12200 CC IF(A.GE.R(2,IZ))R(6,IZ)=A
12300 CC IF(C.GT.A-2)GO TO 161
12400 CC261 R(2,IZ)=C
12500 CC R(6,IZ)=A
12600 C THIS PUTS TIE BETWEEN (NOT ABOVE OR BELOW) NTS. NO STEM CHNG.
12700 CC GO TO 510
12750 R(8,IZ)=B
12800 GO TO 65
12900 CC161 C=C-1.6
13000 CC A=A+1.4
13100 CC GO TO 261
13110 161 J=J+1
13120 K=V(J)
13130 M=N-100
13140 C THIS WILL DIRECT STEMS ON NOTES M THROUGH K. IF -K,STEMS DN.
13150 NN=K
13160 IF(K)K=-K
13200
13300 C NEXT IS STEM INVERTER
13500 60 JB=1
13600 RB=10.
13800 IF(NN)GO TO 509
13900 C IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
14000 CC JB=1
14100 RB=-RB
14200 JB=2
14300 509 DO 507 L=M,K
14400 IF(R(1,L).NE.1.)GO TO 507
14500 JA=R(5,L)/10.
14600 IF(JA.EQ.0)GO TO 507
14700 IF(JA.EQ.JB)R(5,L)=R(5,L)+RB
14800 507 CONTINUE
14810 IF(N.GT.100)GO TO 514
14820 C JUMP IF ONLY REVERSING STEMS.
14900 GO TO 200
15000 62 IF(NN)GO TO 64
15100 IF(A.EQ.DMAX)GO TO 65
15200 AA=B-DMAX
15300 GO TO 63
15400 65 AA=0
15500 GO TO 63
15600 64 IF(A.EQ.UMAX)GO TO 65
15700 AA=UMAX-B
15800 CC63 RB=1.
15900 CC RA=201.
16000 CC IF(N.NE.99)RA=R(2,N)
16010 63 RA=R(6,IZ)
16100 RB=R(2,IZ)
16110 CC IF(MK.GT.0)RB=R(2,KN)
16200 X=1.5+(RA-RB)/BX
16300 IF(AA.GT.0)X=X+AA*BY
16400 IF(NN.GT.0)X=-X
16500 510 R(7,IZ)=X
16600 IF(JB)CALL BMX(RA)
16700 514 J=J+1
16800 1514 N=V(J)
16900 IF(N.NE.0)GO TO 505
17000 IF(J.LT.68)GO TO 514
17100 C SOMETIMES A SLASH IS SEEN AS A 0 (WHEN PRECEDED BY SPACE).
17200 IF(INP(72).EQ.'*')RETURN
17300 IF(IREAD.NE.0)GO TO 3501
17310 CC IF(IDSK)GO TO 3501
17400 CALL TYPE
17500 GO TO 2500
17600 3501 READ(22,2501)J,INP
17700 GO TO 2500
17800 C FOR 2ND LINE.
17900 2501 FORMAT(I,72A1)
18000
18100
18200 22 RA=AMOD(R(7,KN),10.0)
18300 C RA=# OF TAILS, KN=1ST NOTE, K=LAST ('MOD' FOR DOTTED NOTES.)
18400 R(1,IZ)=9
18500 JMAX=0
18600 IF(N-MK.EQ.1)JMAX=-1
18700 CC IF(IABS(N)-MK.EQ.1)JMAX=-1
18800 X=10
18900 IF(NN)X=20
19000 JB=0
19100 DO 2 L=KN+1,K
19150 IF(R(1,L).NE.2)GO TO 12
19160 RB=R(5,L)
19170 GO TO 112
19200 12 IF(R(1,L).NE.1.OR.R(5,L).LT.10.)GO TO 2
19300 C SKIPS NON-NOTES AND DBLSTPS
19350 IF(ABS(R(4,L)).GE.100)GO TO 2
19375 C SKIPS GRACE NOTES
19400 RB=AMOD(R(7,L),10.0)
19500 112 IF(RA.EQ.RB)GO TO 2
19600 JB=-1
19700 C FLAG FOR MIXED NUM. OF BEAMS
19800 IF(RB.LT.RA)RA=RB
19900 2 CONTINUE
20000 C ABOVE FINDS SMALLEST # OF TAILS. NEXT FOR HGTS.
20100 X=X+RA
20200 C # OF BEAMS. IT'S PUT IN DOWN BELOW 550.
20300 200 A=XNOTE(KN)
20400 CC D=A
20500 C A=NOTE 1.
20600 UMAX=A
20700 DMAX=A
20800 C UP MAX. NOTE #, DOWN MAX. NOTE #.
20900 103 DO 3 M=KN,K
21000 IF(R(1,M).NE.1.OR.ABS(R(4,M)).GE.100)GO TO 3
21100 C SKIPS NON-NOTES
21200 7 Y=R(5,M)
21300 B=XNOTE(M)
21400 33 IF(NN.GT.0.)GO TO 5
21500 CC33 IF(X.LT.20.)GO TO 5
21600 C JUMP IF STEM UP
21700 IF(Y.LT.20..AND.Y.GE.10.)R(5,M)=Y+10.
21800 GO TO 55
21900 5 IF(Y.GE.20.)R(5,M)=Y-10.
22000 C STEM UP
22100 55 IF(B.LT.UMAX)GO TO 13
22200 UMAX=B
22300 IF(JMAX.OR.M.EQ.KN.OR.M.EQ.K)GO TO 3
22400 UMAX=UMAX+1
22500 GO TO 3
22600 13 IF(B.GT.DMAX)GO TO 3
22700 DMAX=B
22800 IF(JMAX.OR.M.EQ.KN.OR.M.EQ.K)GO TO 3
22900 DMAX=DMAX-1
23000 3 CONTINUE
23100 C LOOKS FOR LOWER AND HIGHER NOTES THAN NOTE 1.
23200 4 IF(MODE.EQ.5)GO TO 62
23300 AA=A
23400 BB=B
23500 C=1
23600 IF(X.LT.20.)GO TO 48
23700 C JUMP IF STEM IS UP
23800 CALL EXCH(AA,BB)
23900 C=-C
24000 CALL EXCH(UMAX,DMAX)
24100 48 IF(AA.LT.BB)GO TO 45
24200 IF(UMAX.EQ.A)GO TO 46
24300 47 A=UMAX-C
24400 B=A
24500 GO TO 444
24600 46 IF(UMAX.GT.AA)GO TO 47
24700 CC IF(A-B.GT.7.)BB=AA-7.*C
24800 GO TO 49
24900 45 IF(UMAX.NE.B)GO TO 47
25000 CC IF(B-A.GT.7.)AA=BB-7.*C
25100 49 A=AA
25200 B=BB
25300 IF(X.GE.20)CALL EXCH(A,B)
25400
25500 444 R(3,IZ)=STAFF
25510 IF(ABS(A-B).LE.6)GO TO 14
25512 C LIMITS SLOPE OF BEAM
25515 IF(X.GE.20)GO TO 141
25520 IF(B.GT.A)GO TO 140
25530 142 B=A-6*C
25540 GO TO 14
25542 141 IF(B.GT.A)GO TO 142
25550 140 A=B-6*C
25600 14 R(4,IZ)=A
25700 445 R(5,IZ)=B
25800 C MAKES HORIZONTAL BEAMS IF PATTERN IS UP-DOWN.
25900 R(6,IZ)=R(2,K)
26000 C ABOVE IS POS.2
26100 GO TO 510
26200
26300 C NEXT IS FOR ACCENTS AND OTHER MARKS
26400
26500 30 CALL MARKS(RA)
26510 J=J+1
26600 IF(RA.EQ.99)RA=V(J)
26700 CC???⊗⊗ IF(R(5,K).GE.20.)RA=RA+.1
26800 C IF STEM IS DOWN OR THERE ARE NOTES BELOW(DBL STP), POSITION
26900 C OF ACCENT WILL BE INVERTED.
27000 RB=R(6,K)
27010 B=10.
27055 IF(RA.EQ.6)RA=26.
27077 C TEMPORARY CHANGE FOR FERMATA*******
27100 IF(RA.GT.10.)RA=RA/10.
27105 A=ABS(AMOD(RB,1.))
27110 IF(A.EQ.0)GO TO 301
27115 IF(RA.GT.3)GO TO 303
27120 RB=FLOAT(IFIX(RB))
27125 RA=RA+A/10.
27127 C THIS PUTS 2-DIGIT CODE BEFORE 1-DIGIT CODE.
27130 GO TO 301
27135 303 IF(A.LT..3)GO TO 302
27140 B=100.
27145 GO TO 301
27150 302 B=1000.
27200 301 IF(RB.LT.0)RA=-RA
27300 R(6,K)=RB+RA/B
27400 GO TO 514
27500 C USES 4-7,9,11-13 FOR ACC. > FERM. DOT - DNBOW UPBOW HARM.
27600 C NOTE#,ACCENT#/N,A/N,A*
27700 END
27800
27900 FUNCTION XNOTE(J)
28000 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
28010 COMMON/XRN/RN(4000)
28020 DIMENSION R(8,100)
28030 EQUIVALENCE (R,RN(3001))
28100 XNOTE=AMOD(R(4,J),100.)
28200 END